import axios from 'axios';
import qs from 'qs';
import { URI_LOGIN, URI_INIT } from './api';
import { showGlobalError, alert, uninit } from './utils';
import { SESSION_TOKEN_NAME, saveSessionId, getSessionId } from './store';

axios.defaults.baseURL = process.env.VUE_APP_BASE_URL;
axios.defaults.withCredentials = false;
axios.defaults.headers[SESSION_TOKEN_NAME] = getSessionId();
axios.defaults.transformRequest = function(data, headers) {
	//上传文件
	if(headers['Content-Type'] == 'multipart/form-data') {
		var formData = new FormData();
		var value = null;
		for(name in data) {
			value = data[name];
			if(value != null) {
				if(value instanceof Array) {
					for(var i=0; i<value.length; i++) {
						formData.append(name, value[i]);
					}
				} else {
					formData.append(name, value);
				}
			}
		}
		return formData;
	} else if(headers['Content-Type'] == 'application/json') {
		return JSON.stringify(data);
	}
	return qs.stringify(data, {arrayFormat: 'repeat'});
}

// 添加响应拦截器
axios.interceptors.response.use((response) => {
    const isInit = URI_INIT == response.config.url;
    const res = response.data;
    if(isInit) {
    	saveSessionId(res.data.sessionId);
    	axios.defaults.headers[SESSION_TOKEN_NAME] = getSessionId();
    }
    if(URI_LOGIN == response.config.url) {
    	saveSessionId(res.data);
    	axios.defaults.headers[SESSION_TOKEN_NAME] = getSessionId();
    }
    if(!res.success ) {
    	//未认证
    	if(res.code == 401) {
    		if(isInit) {
	    		//清理登录信息、跳转到登录页面
	    		uninit();
    		} else {
    			alert("errors.timeout", function() {
    				//清理登录信息
	    			uninit();
    			});
    		}
    	} else if(res.message) {
    		showGlobalError(res.message);
    		console.log(res.message);
    	}
    }
    return response;
}, (error) => {
	if(error.response) {
		if(error.response.status == 404) {
			showGlobalError("errors.404");
		} else {
			if(error.response.data && error.response.data.message) {
				showGlobalError(error.response.data.message);	
			} else {
				showGlobalError(error.message);	
			}
		}
	} else {
		showGlobalError(error.message);
	}
	console.log(error);
    return Promise.reject(error);
});

export default axios;